#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Termstructures;
using Cephei.QL;
namespace Cephei.QL.Instruments
{
    /// <summary> 
	/// ! \ingroup instruments  \test - the correctness of the returned value is tested by checking that the price of a payer (resp. receiver) swaption decreases (resp. increases) with the strike. - the correctness of the returned value is tested by checking that the price of a payer (resp. receiver) swaption increases (resp. decreases) with the spread. - the correctness of the returned value is tested by checking it against that of a swaption on a swap with no spread and a correspondingly adjusted fixed rate. - the correctness of the returned value is tested by checking it against a known good value. - the correctness of the returned value of cash settled swaptions is tested by checking the modified annuity against a value calculated without using the Swaption class.   \todo add greeks and explicit exercise lag
	/// </summary>
    [Guid ("696208BE-B6D4-4fa7-A41E-AF780B21B711"),ComVisible(true)]
	public interface ISwaption : Cephei.QL.IOption
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double ImpliedVolatility(Double price, Cephei.QL.Termstructures.IYieldTermStructure discountCurve, Double guess, Microsoft.FSharp.Core.FSharpOption<Double> accuracy, Microsoft.FSharp.Core.FSharpOption<UInt32> maxEvaluations, Microsoft.FSharp.Core.FSharpOption<Double> minVol, Microsoft.FSharp.Core.FSharpOption<Double> maxVol);
        /// <summary> 
		/// 
		/// </summary>
		 Boolean IsExpired {get;}
        /// <summary> 
		/// 
		/// </summary>
		 QL.Instruments.Settlement.TypeEnum SettlementType {get;}
        /// <summary> 
		/// 
		/// </summary>
		 QL.Instruments.VanillaSwap.TypeEnum Type {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Instruments.IVanillaSwap UnderlyingSwap {get;}
    }   

    /// <summary> 
	/// ! \ingroup instruments  \test - the correctness of the returned value is tested by checking that the price of a payer (resp. receiver) swaption decreases (resp. increases) with the strike. - the correctness of the returned value is tested by checking that the price of a payer (resp. receiver) swaption increases (resp. decreases) with the spread. - the correctness of the returned value is tested by checking it against that of a swaption on a swap with no spread and a correspondingly adjusted fixed rate. - the correctness of the returned value is tested by checking it against a known good value. - the correctness of the returned value of cash settled swaptions is tested by checking the modified annuity against a value calculated without using the Swaption class.   \todo add greeks and explicit exercise lag Factory
	/// </summary>
   	[ComVisible(true)]
    public interface ISwaption_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    ISwaption Create (Cephei.QL.Instruments.IVanillaSwap swap, Cephei.QL.IExercise exercise, Microsoft.FSharp.Core.FSharpOption<QL.Instruments.Settlement.TypeEnum> delivery, Cephei.QL.IPricingEngine QL_Pricer);
    }
}

